package com.ht.modules.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ht.modules.system.entity.SysDepart;
import com.ht.modules.system.model.SysDepartTreeModel;

import java.util.List;
import java.util.Map;

/**
 * 部门表 服务实现类
 */
public interface ISysDepartService extends IService<SysDepart> {

    /**
     * 查询所有部门信息,并分节点进行显示
     */
    List<SysDepartTreeModel> queryTreeList();

    /**
     * 保存部门数据
     */
    void saveDepartData(SysDepart sysDepart, String username);

    /**
     * 更新depart数据
     */
    Boolean updateDepartDataById(SysDepart sysDepart, String username);

    /**
     * 删除depart数据
     */
    /* boolean removeDepartDataById(String id); */

    /**
     * 根据关键字搜索相关的部门数据
     */
    List<SysDepartTreeModel> searhBy(String keyWord);

    /**
     * 根据部门id删除并删除其可能存在的子级部门
     */
    boolean delete(String id);

    /**
     * 查询SysDepart集合
     */
    List<SysDepart> queryUserDeparts(String userId);

    int getProjectNameCount(String departCode);

    /**
     * 获取父级code
     */
    String getParentCodeById(String companyId);

    /**
     * 根据人员id获取对应的最上级部门
     */
    List<SysDepart> queryUserFirstDeparts(String userId);

    /**
     * 获取部门信息用于页面下拉查询
     *
     * @param orgType 部门类型（1-企业；2-部门；不传则企业和部门都会查出来）
     * @return 部门信息list
     */
    List<Map<String, Object>> getDepartForSearch(String orgType);

    /**
     * 根据企业部门code返回企业部门id
     * 主要用户获取当前登录人所选部门id
     *
     * @param orgCode 企业部门code
     * @return 企业部门id
     */
    String getDepartIdByCode(String orgCode);

    List<SysDepart> listLevel1Departs();

    /**
     * 根据当前部门id获取其一级部门
     * 若当前部门为一级部门，直接返回
     * 若当前部门为一级部门以下，则返回其上级的一级部门
     */
    List<SysDepart> getLevel1DepartByCurrentDepart(String departId);
}
